NAS-141049 / 27.0.0-BETA.1 / Migrate storage / pool-manager wizard to tn-* - #13868
NAS-141049 / 27.0.0-BETA.1 / Migrate storage / pool-manager wizard to tn-*#13868AlexKarpov98 wants to merge 12 commits into
Conversation
|
Claude finished @AlexKarpov98's task in 7m 19s —— View job ReviewThis is an unusually disciplined migration — the centralized "Known upstream defects" table in A few things worth another look: 1. dRAID selects can display a value that isn't in their own option list
// draid-selection.component.ts:230
if (this.isStepActive() && maxPossibleWidth) {but 2.
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #13868 +/- ##
==========================================
+ Coverage 87.63% 87.66% +0.03%
==========================================
Files 1895 1901 +6
Lines 71860 72036 +176
Branches 9142 9187 +45
==========================================
+ Hits 62972 63148 +176
Misses 8888 8888 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…ration Narrow the indexControlsByLabel guard to unlabelled controls only: repeated labelled controls (ix-list rows) are legitimate and were breaking iscsi-wizard, target-form and apps-settings specs. Claude-Session: https://claude.ai/code/session_01SUZQL1eT6RcmdRR59eYxpY
…ation - indexControlsByLabel drops the ambiguous '' key instead of throwing, so a form with two unlabelled controls no longer fails lookups for its labelled siblings. - Share formControlHarnessTypes/indexFormControls between PoolManagerHarness and the draid spec's local form facade. - tn-radio-group restores focus to the checked option after a model write recreates the radios; document the reference-equality guard and the validator-free invariant on the shared inner control. - Replace the hand-rolled role="button" vdev delete affordance with tn-icon-button. - Restore the details-item label/link styling storage-health-card lost when details-card() was swapped for tn-detail-card. - Align the pools-dashboard tn-empty icon with the rest of the app (56px). Claude-Session: https://claude.ai/code/session_01SUZQL1eT6RcmdRR59eYxpY
…ation - tn-radio-group: fold the index into the @for track key so options whose values stringify alike no longer collide (NG0955); covered by a new spec. - manual-selection-vdev: add a `position` input so the delete button's data-test and accessible name are unique per vdev card. - manual-selection-disk-filters: give the label-less search input an accessible name via [ariaLabel]. - disk-size-selects: record why the null re-emission in updateOptions() must stay unconditional (guarding it breaks unsetting-on-fewer-disks.spec.ts). - tn-migration playbook: correct the tn-menu-item test-id prefix (button-*, not menu-item-*) and document that tn-* form controls fall back to the bound control name, both verified against @truenas/ui-components 0.3.26. Claude-Session: https://claude.ai/code/session_01SUZQL1eT6RcmdRR59eYxpY
…gration - unlock-sed-disks: scope each exception row's test ids and the remove button's accessible name by row position, so repeated rows no longer resolve to the same data-test or the same aria-label. - tn-radio-group: resolve an absent accessible name to null so the group omits aria-label instead of rendering an empty one; fold the per-option test id into renderItems so it is computed once instead of on every change-detection pass. - TnFormControlHarness: document the supported control set and throw a specific error from setValue when the field holds something else. Claude-Session: https://claude.ai/code/session_01LoyKkDU26j8Z8Hgar3ghVW
Screen.Recording.2026-07-27.at.13.57.16.mov